package main

import (
	"gitee.com/GopherX/mqsdk/consts"
	"gitee.com/GopherX/mqsdk/onebot"
	"gitee.com/GopherX/mqsdk/ui"
)

// 插件信息
var (

	// -----------修改区域开始---------------
	插件名称 = "aGoDLL"
	插件版本 = "1.0.0"
	插件作者 = "Gopher X"
	插件说明 = " QQ : 1071761135 "
	// ----------修改区域结束----------------

	// ------不推荐修改区域开始---------------
	// 推荐插件生成文件存放位置 【data\plugin\插件名称】 末尾不带\
	应用目录 = 初始化应用目录()
	_    = 初始化函数(应用目录)
	// ------不推荐修改区域结束---------------
)

// 初始化函数
// path :【data\plugin\插件名称】
func 初始化函数(path string) error {
	// 初始化代码请写在这里
	return nil
}

// 设置按钮
func 设置被按下() {
	// 点击设置后执行此处代码
	ui.MessageBoxPlain("启动结果", "插件启动成功")
}

func 框架事件(xe onebot.MQEvent, retChan chan<- int) {
	var res = consts.MT_消息处理_继续
	retChan <- res //秒返回 ，有阻塞需求自行处理

	// 常用消息事件
	switch xe.MQ_消息类型 {
	case consts.MT_常用消息_好友:
		// api.A输出日志("收到好友->" + d.MQ_消息来源 + "的信息:" + d.MQ_消息内容)
		//私聊复读机
		// api.A发送消息(d.MQ_机器人QQ, d.MQ_消息类型, d.MQ_消息来源, d.MQ_消息来源, d.MQ_消息内容, 0, 0, 0)
	case consts.MT_常用消息_群:
		// api.A输出日志("收到群->" + d.MQ_消息来源 + " 成员->" + d.MQ_触发对象_主动 + "的信息:" + d.MQ_消息内容)
	case consts.MT_常用消息_讨论组:
		// api.A输出日志("收到讨论组->" + d.MQ_消息来源 + " 成员->" + d.MQ_触发对象_主动 + "的信息:" + d.MQ_消息内容)
	case consts.MT_常用消息_群临时会话:
		// api.A输出日志("收到临时会话->" + d.MQ_触发对象_主动 + " 在->" + d.MQ_消息来源 + "发起的会话信息:" + d.MQ_消息内容)
	case consts.MT_其他_机器人发出消息:
	case consts.MT_好友_被单向添加好友:
		// api.A输出日志(d.MQ_机器人QQ + "被" + d.MQ_触发对象_主动 + "添加单向好友")
	case consts.MT_好友_被请求添加好友:
		// api.A输出日志(d.MQ_机器人QQ + "被" + d.MQ_触发对象_主动 + "请求添加好友 附加理由:" + d.MQ_消息内容)
		// api.A置好友验证事件(d.MQ_机器人QQ, d.MQ_触发对象_主动, consts.MT_事件处理_同意, "啊哦")
	case consts.MT_好友_被同意加为好友:
		// api.A输出日志(d.MQ_机器人QQ + "被" + d.MQ_触发对象_主动 + "被同意加为好友")
	case consts.MT_好友_被拒绝加为好友:
		// api.A输出日志(d.MQ_机器人QQ + "被" + d.MQ_触发对象_主动 + "被拒绝加为好友")
	case consts.MT_群_某人申请加入群:
		// api.A输出日志(d.MQ_触发对象_主动 + "请求加入群" + d.MQ_消息来源 + " 附加理由:" + d.MQ_消息内容)
		// api.A置群验证事件(d.MQ_机器人QQ, d.MQ_原始信息, consts.MT_事件处理_拒绝, "气死你啊", 0)
	case consts.MT_群_某人被邀请加入群:
		// api.A输出日志(d.MQ_触发对象_主动 + "请求加入群" + d.MQ_消息来源 + " 附加理由:" + d.MQ_消息内容)
		// api.A置群验证事件(d.MQ_机器人QQ, d.MQ_原始信息, consts.MT_事件处理_拒绝, "气死你啊", 0)
	case consts.MT_群_我被邀请加入群:
		// api.A输出日志("我被" + d.MQ_触发对象_主动 + "邀请加入群" + d.MQ_消息来源)
		// api.A置群验证事件(d.MQ_机器人QQ, d.MQ_原始信息, consts.MT_事件处理_拒绝, "就不哈哈", 0)
		// api.A置群验证事件(d.MQ_机器人QQ, d.MQ_原始信息, consts.MT_事件处理_同意, "", 0)
	case consts.MT_常用消息_未定义:
		// api.A输出日志("未定义的信息")
	}

	// 好友事件
	switch xe.MQ_消息类型 {
	case consts.MT_好友_好友撤回消息:
		// api.A输出日志(d.MQ_机器人QQ + "好友->" + d.MQ_触发对象_主动 + "撤回了一条消息->" + "消息序号为->" + strconv.Itoa(int(d.MQ_消息序号)) + "消息ID为->" + strconv.Itoa(int(d.MQ_消息ID)))
	case consts.MT_好友_好友状态改变:
		// api.A输出日志("好友:" + api.A取昵称(d.MQ_机器人QQ, d.MQ_触发对象_主动) + "(" + d.MQ_触发对象_主动 + ") 状态改变为 " + d.MQ_消息内容)
	case consts.MT_好友_被删除好友:
		// api.A输出日志("被" + api.A取昵称(d.MQ_机器人QQ, d.MQ_触发对象_主动) + "(" + d.MQ_触发对象_主动 + ")删除了好友")
	case consts.MT_好友_好友签名变更:
		// api.A输出日志("好友 " + api.A取昵称(d.MQ_机器人QQ, d.MQ_触发对象_主动) + "(" + d.MQ_触发对象_主动 + ")的签名变更为 " + d.MQ_消息内容)
	case consts.MT_好友_好友视频接收:
		// api.A输出日志(d.MQ_机器人QQ + "收到好友->" + d.MQ_触发对象_主动 + "发来的视频->" + d.MQ_消息内容)
	case consts.MT_好友_好友语音接收:
		// api.A输出日志(d.MQ_机器人QQ + "收到好友->" + d.MQ_触发对象_主动 + "发来的语音->" + d.MQ_消息内容)
	case consts.MT_好友_说说被评论:
		// api.A输出日志(d.MQ_机器人QQ + "说说被对象->" + d.MQ_触发对象_主动 + "评论")
	case consts.MT_好友_好友正在输入:
		// api.A输出日志(d.MQ_机器人QQ + "好友->" + d.MQ_触发对象_主动 + "正在输入")
	case consts.MT_好友_好友今天首次发起会话:
		// api.A输出日志(d.MQ_机器人QQ + "好友->" + d.MQ_触发对象_主动 + "今天在电脑上首次发起了好友聊天信息/打开聊天框")
	case consts.MT_好友_被好友抖动:
		// api.A输出日志(d.MQ_机器人QQ + "好友->" + d.MQ_触发对象_主动 + "发送了一个抖动")
	case consts.MT_好友_好友文件接收:
		// api.A输出日志(d.MQ_机器人QQ + "收到好友->" + d.MQ_触发对象_主动 + "发来的文件->" + d.MQ_消息内容)
	}

	// 群事件
	switch xe.MQ_消息类型 {
	case consts.MT_群_对象被禁言:
		// api.A输出日志(d.MQ_机器人QQ + "群->" + d.MQ_消息来源 + "->" + d.MQ_触发对象_被动 + "被" + d.MQ_触发对象_主动 + "禁言->" + d.MQ_消息内容 + "秒")
	case consts.MT_群_对象被解除禁言:
		// api.A输出日志(d.MQ_机器人QQ + "群->" + d.MQ_消息来源 + "->" + d.MQ_触发对象_被动 + "被" + d.MQ_触发对象_主动 + "解除禁言")
	case consts.MT_群_群管开启全群禁言:
		// api.A输出日志(d.MQ_机器人QQ + "群->" + d.MQ_消息来源 + "->" + d.MQ_触发对象_主动 + "开启了全群禁言")
	case consts.MT_群_群管关闭全群禁言:
		// api.A输出日志(d.MQ_机器人QQ + "群->" + d.MQ_消息来源 + "->" + d.MQ_触发对象_主动 + "关闭了全群禁言")
	case consts.MT_群_群管开启匿名聊天:
		// api.A输出日志(d.MQ_机器人QQ + "群->" + d.MQ_消息来源 + "->" + d.MQ_触发对象_主动 + "开启了匿名聊天")
	case consts.MT_群_群撤回消息:
		// api.A输出日志(d.MQ_机器人QQ + "群->" + d.MQ_消息来源 + "->" + d.MQ_触发对象_主动 + "撤回了一条消息->" + "消息序号为->" + strconv.Itoa(int(d.MQ_消息序号)) + "消息ID为->" + strconv.Itoa(int(d.MQ_消息ID)))
	case consts.MT_群_某人被批准加入了群:
		// api.A输出日志(api.A取昵称(d.MQ_机器人QQ, d.MQ_触发对象_被动) + "(" + d.MQ_触发对象_被动 + ")被" + api.A取昵称(d.MQ_机器人QQ, d.MQ_触发对象_主动) + "(" + d.MQ_触发对象_主动 + ")批准加入了群")
	case consts.MT_群_某人已被邀请入群:
		// 一般为群主或者管理员邀请的
		// api.A输出日志(d.MQ_触发对象_被动 + "已被" + d.MQ_触发对象_主动 + "邀请加入群" + d.MQ_消息来源)
	case consts.MT_群_某人退出群:
		// api.A输出日志(api.A取昵称(d.MQ_机器人QQ, d.MQ_触发对象_主动) + "(" + d.MQ_触发对象_主动 + ")退出了群")
	case consts.MT_群_某人被管理移除群:
		// api.A输出日志(api.A取昵称(d.MQ_机器人QQ, d.MQ_触发对象_被动) + "(" + d.MQ_触发对象_被动 + ")被" + api.A取昵称(d.MQ_机器人QQ, d.MQ_触发对象_主动) + "(" + d.MQ_触发对象_主动 + ")移除了群")
	case consts.MT_群_某群被解散:
		// api.A输出日志("群" + d.MQ_消息来源 + "被群主:" + api.A取昵称(d.MQ_机器人QQ, d.MQ_触发对象_主动) + "(" + d.MQ_触发对象_主动 + ")解散了")
	case consts.MT_群_某人成为管理:
		// api.A输出日志("群" + d.MQ_消息来源 + "成员:" + api.A取昵称(d.MQ_机器人QQ, d.MQ_触发对象_被动) + "(" + d.MQ_触发对象_被动 + ")成为了管理员")
	case consts.MT_群_某人被取消管理:
		// api.A输出日志("群" + d.MQ_消息来源 + "成员:" + api.A取昵称(d.MQ_机器人QQ, d.MQ_触发对象_被动) + "(" + d.MQ_触发对象_被动 + ")被取消了管理员")
	case consts.MT_群_群文件接收:
		// api.A输出日志(d.MQ_机器人QQ + "收到群->" + d.MQ_消息来源 + "里->" + d.MQ_触发对象_主动 + "发来的文件->" + d.MQ_消息内容 + "->" + strconv.Itoa(int(d.MQ_消息序号)) + "->" + strconv.Itoa(int(d.MQ_消息ID)))
		// time.Sleep(time.Second * 2)
		// api.A撤回消息(d.MQ_机器人QQ, d.MQ_消息来源, strconv.Itoa(int(d.MQ_消息序号)), strconv.Itoa(int(d.MQ_消息ID)))
	case consts.MT_群_群名片变动:
		// api.A输出日志(api.A取群名片(d.MQ_机器人QQ, d.MQ_消息来源, d.MQ_触发对象_主动) + "(" + d.MQ_触发对象_主动 + ")的群名片变更为:" + d.MQ_消息内容)
	case consts.MT_群_群名变动:
		// api.A输出日志(d.MQ_机器人QQ + "群名变动->" + d.MQ_消息来源 + "->" + d.MQ_消息内容)
	case consts.MT_群_群公告变动:
		// api.A输出日志(d.MQ_机器人QQ + "群" + d.MQ_消息来源 + "管理:" + api.A取昵称(d.MQ_机器人QQ, d.MQ_触发对象_主动) + "(" + d.MQ_触发对象_主动 + ")发布了新公告:" + "\n" + d.MQ_消息内容)
	case consts.MT_群_群语音接收:
		// api.A输出日志(d.MQ_机器人QQ + "收到群->" + d.MQ_消息来源 + "里->" + d.MQ_触发对象_主动 + "发来的语音->" + d.MQ_消息内容 + "->" + strconv.Itoa(int(d.MQ_消息序号)) + "->" + strconv.Itoa(int(d.MQ_消息ID)))
		// time.Sleep(time.Second * 2)
		// api.A撤回消息(d.MQ_机器人QQ, d.MQ_消息来源, strconv.Itoa(int(d.MQ_消息序号)), strconv.Itoa(int(d.MQ_消息ID)))
	case consts.MT_群_群消息被设置为精华:
		// api.A输出日志("群->" + d.MQ_消息来源 + "中的->" + d.MQ_触发对象_被动 + "的消息被->" + d.MQ_触发对象_主动 + "设为精华，消息序号->" + strconv.Itoa(int(d.MQ_消息序号)) + "，消息ID->" + strconv.Itoa(int(d.MQ_消息ID)))
	case consts.MT_群_群消息被取消精华:
		// api.A输出日志("群->" + d.MQ_消息来源 + "中的->" + d.MQ_触发对象_被动 + "的消息被->" + d.MQ_触发对象_主动 + "取消设为精华，消息序号->" + strconv.Itoa(int(d.MQ_消息序号)) + "，消息ID->" + strconv.Itoa(int(d.MQ_消息ID)))
	case consts.MT_群_群视频接收:
		// api.A输出日志(d.MQ_机器人QQ + "收到群->" + d.MQ_消息来源 + "里->" + d.MQ_触发对象_主动 + "发来的视频->" + d.MQ_消息内容 + "->" + strconv.Itoa(int(d.MQ_消息序号)) + "->" + strconv.Itoa(int(d.MQ_消息ID)))
		// time.Sleep(time.Second * 2)
		// api.A撤回消息(d.MQ_机器人QQ, d.MQ_消息来源, strconv.Itoa(int(d.MQ_消息序号)), strconv.Itoa(int(d.MQ_消息ID)))
	case consts.MT_群_群管关闭匿名聊天:
		// api.A输出日志(d.MQ_机器人QQ + "群->" + d.MQ_消息来源 + "->" + d.MQ_触发对象_主动 + "关闭了匿名聊天")
	}

	// 财付通事件
	switch xe.MQ_消息类型 {
	case consts.MT_财富_收到财付通转账:
		// 请自行解析json：MQ_消息内容
		// 未收款
		// {"id":"101000026901502107061428363313","status":"0","money":"未收款无法查看","msg":"测试"}
		// 已收款
		// "id":"101000026901502107061428363613","status":"1","money":"0.01","msg":"测试一下"}
		// api.A输出日志(d.MQ_机器人QQ + "收到来自->" + d.MQ_触发对象_主动 + "的财付通转账->" + d.MQ_消息内容)
	case consts.MT_财富_收到群聊红包:
		// 请自行解析json：MQ_消息内容
		// {"type":"12","red_id":"10000320012107063900101419587000","key":"96 D5 C0 44 CE F0 FE E7 9C 32 AF 85 CB 89 80 E8 82 6E 47 C3 40 FA 8C 43 54 0F AD 59 34 CC 0D DE","red_Key":"d7a4d872dd22378ee9148648319aeb6c","red_Skey":"c6a4ecf73599a65a4553c150beac7224","title":"大吉大利","nick":"鸡丁","p_skey":"LjM*RkjOH1fBicw8zs5vp8LID2rp4mP4yLz2xPLoEQw_"}
		// 说明：口令红包时，title为口令
		// type说明：12=口令红包，6=拼手气，4=普通红包
		// api.A输出日志(d.MQ_机器人QQ + "收到群->" + d.MQ_消息来源 + "里->" + d.MQ_触发对象_主动 + "发来的红包->" + d.MQ_消息内容 + "->" + strconv.Itoa(int(d.MQ_消息序号)) + "->" + strconv.Itoa(int(d.MQ_消息ID)))
		// time.Sleep(time.Second * 2)
		// api.A撤回消息(d.MQ_机器人QQ, d.MQ_消息来源, strconv.Itoa(int(d.MQ_消息序号)), strconv.Itoa(int(d.MQ_消息ID)))
	case consts.MT_财富_收到私聊红包:
		// api.A输出日志(d.MQ_机器人QQ + "收到好友->" + d.MQ_触发对象_主动 + "发来的红包->" + d.MQ_消息内容)
	case consts.MT_财富_群聊红包被领取:
		// 可获得：MQ_消息内容（MQ_msg）
		// 调用 MyQQ_HB_Detial 解析领取详情即可
		// {"key":"96 D5 C0 44 CE F0 FE E7 9C 32 AF 85 CB 89 80 E8 82 6E 47 C3 40 FA 8C 43 54 0F AD 59 34 CC 0D DE","red_Key":"d7a4d872dd22378ee9148648319aeb6c","red_Skey":"c6a4ecf73599a65a4553c150beac7224","nick":"鸡丁","p_skey":"LjM*RkjOH1fBicw8zs5vp8LID2rp4mP4yLz2xPLoEQw_"}
		// api.A输出日志("群->" + d.MQ_消息来源 + "内的->" + d.MQ_触发对象_主动 + "领取了机器人->" + d.MQ_机器人QQ + "发的红包")
	case consts.MT_财富_私聊红包被领取: // 暂未开放
	}

	// 框架QQ事件
	switch xe.MQ_消息类型 {
	case consts.MT_框架QQ_添加了一个新的帐号:
		// api.A输出日志("添加了一个新的帐号" + d.MQ_触发对象_主动)
	case consts.MT_框架QQ_QQ登录完成:
		// api.A输出日志(d.MQ_触发对象_主动 + "登录完成")
	case consts.MT_框架QQ_QQ被手动离线:
		// api.A输出日志(d.MQ_触发对象_主动 + "被手动离线")
	case consts.MT_框架QQ_QQ被强制离线:
		// api.A输出日志(d.MQ_触发对象_主动 + "被强制离线 估计冻结了或者被挤下线了")
	case consts.MT_框架QQ_QQ长时间无响应或掉线:
		// api.A输出日志(d.MQ_触发对象_主动 + "QQ长时间无响应或掉线")
	case consts.MT_其他_其他设备上线:
		// 请自行解析 MQ_消息内容 ： {"deviceID": "809020","flag": "0380900001010761A1F7500E149A6BO00A04"}
		// api.A输出日志(d.MQ_触发对象_主动 + "在其他设备上线")
		// JSON.取通用属性 (“deviceID”), JSON.取通用属性 (“flag”))
	case consts.MT_其他_其他设备下线:
		//请自行解析 MQ_消息内容 ： {"deviceID": "809020","flag": "0380900001010761A1F7500E149A6BO00A04"}
		// api.A输出日志(d.MQ_触发对象_主动 + "在其他设备下线")
	}

	// 框架、插件事件
	switch xe.MQ_消息类型 {
	case consts.MT_框架_框架加载完成:
		//api.A输出日志(fmt.Sprintf("%s | 接收到一条【%d】类型消息 | %s", 插件名称, xe.MessageType, xe.Message))
	case consts.MT_框架_框架即将重启:
		//api.A输出日志(fmt.Sprintf("%s | 接收到一条【%d】类型消息 | %s", 插件名称, xe.MessageType, xe.Message))
	// 插件事件
	case consts.MT_插件_本插件载入:
		//api.A输出日志(fmt.Sprintf("%s | 接收到一条【%d】类型消息 | %s", 插件名称, xe.MessageType, xe.Message))
	case consts.MT_插件_插件被启用:
		//api.A输出日志(fmt.Sprintf("%s | 接收到一条【%d】类型消息 | %s", 插件名称, xe.MessageType, xe.Message))
	case consts.MT_插件_插件被禁用:
		//api.A输出日志(fmt.Sprintf("%s | 接收到一条【%d】类型消息 | %s", 插件名称, xe.MessageType, xe.Message))
	case consts.MT_插件_插件被点击:
		//点击方式参考子类型.  1=左键单击 2=右键单击 3=左键双击
		//api.A输出日志(fmt.Sprintf("%s | 接收到一条【%d】类型消息 | %s", 插件名称, xe.MessageType, xe.Message))
	}
}
